const FaceAnalysisService = require('../services/faceAnalysis.service');
const logger = require('../logger');
const { v4: uuidv4 } = require('uuid');

/**
 * 面相分析控制器
 */

/**
 * @desc 上传面部图片进行面相分析
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.analyzeFace = async (req, res) => {
  try {
    logger.info('开始面相分析', { 
      analysisType: 'face_analysis',
      timestamp: new Date().toISOString()
    });

    // 获取上传的图片文件（如果有的话）
    // 注意：实际实现中需要处理文件上传，这里我们直接生成模拟分析结果
    const { imageUrl } = req.body;

    // 调用面相分析服务
    const analysisResult = await FaceAnalysisService.analyze(imageUrl);

    // 添加分析ID
    const resultWithId = {
      id: uuidv4(),
      ...analysisResult,
      createdAt: new Date().toISOString()
    };

    logger.info('面相分析完成', { 
      analysisId: resultWithId.id,
      success: true
    });

    res.status(200).json({
      success: true,
      message: '面相分析完成',
      data: resultWithId
    });
  } catch (error) {
    logger.error('面相分析失败', { 
      error: error.message,
      stack: error.stack
    });

    res.status(500).json({
      success: false,
      message: '面相分析失败，请稍后重试',
      error: error.message
    });
  }
};

/**
 * @desc 获取面相分析结果
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.getFaceAnalysis = async (req, res) => {
  try {
    const { id } = req.params;

    if (!id) {
      return res.status(400).json({
        success: false,
        message: '缺少分析ID参数'
      });
    }

    logger.info('获取面相分析结果', { analysisId: id });

    // 在实际实现中，这里应该从数据库获取结果
    // 现在我们返回模拟数据
    const mockResult = await FaceAnalysisService.getMockAnalysis(id);

    if (!mockResult) {
      return res.status(404).json({
        success: false,
        message: '未找到面相分析结果'
      });
    }

    res.status(200).json({
      success: true,
      message: '获取面相分析结果成功',
      data: mockResult
    });
  } catch (error) {
    logger.error('获取面相分析结果失败', { 
      error: error.message,
      stack: error.stack
    });

    res.status(500).json({
      success: false,
      message: '获取面相分析结果失败',
      error: error.message
    });
  }
};

/**
 * @desc 保存面相分析结果
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.saveFaceAnalysis = async (req, res) => {
  try {
    const userId = req.user.id;
    const { analysisData } = req.body;

    if (!analysisData) {
      return res.status(400).json({
        success: false,
        message: '缺少分析数据'
      });
    }

    logger.info('保存面相分析结果', { 
      userId,
      analysisId: analysisData.id
    });

    // 调用服务保存分析结果
    const savedResult = await FaceAnalysisService.saveAnalysis(userId, analysisData);

    res.status(201).json({
      success: true,
      message: '面相分析结果保存成功',
      data: savedResult
    });
  } catch (error) {
    logger.error('保存面相分析结果失败', { 
      error: error.message,
      stack: error.stack
    });

    res.status(500).json({
      success: false,
      message: '保存面相分析结果失败',
      error: error.message
    });
  }
};

/**
 * @desc 获取当前用户的面相分析历史记录
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 */
exports.getUserFaceAnalyses = async (req, res) => {
  try {
    const userId = req.user.id;

    logger.info('获取用户面相分析历史记录', { userId });

    // 调用服务获取用户历史记录
    const analyses = await FaceAnalysisService.getUserAnalyses(userId);

    res.status(200).json({
      success: true,
      message: '获取用户面相分析历史记录成功',
      data: analyses
    });
  } catch (error) {
    logger.error('获取用户面相分析历史记录失败', { 
      error: error.message,
      stack: error.stack
    });

    res.status(500).json({
      success: false,
      message: '获取用户面相分析历史记录失败',
      error: error.message
    });
  }
};